不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我!
跟着达尔闻一步步操作,完整的设计一个STM32的智能家居控制系统项目——
硬件系统完成温度、湿度、光照、PM2.5、风速等监测,并通过MCU处理之后上报至云端。软件系统手机通过小程序,可以实时显示测试数据,并可以远程控制硬件系统动作,比如继电器的开关。点击阅读原文看视频直播(本周二下午3:00直播)
B站UP主阿正(B站ID:阿正啷个哩个啷)作为达尔闻特邀讲师告诉你详细设计过程!项目源码全部开源,在“达尔闻说”微信回复:STM32智能家居,获得源码。
如果你刚好面临做毕业设计?或者对硬件设计感兴趣想要动手实践?用STM32上手,再适合不过了,准备好了么?
硬件:主控MCU STM32开发板、监测传感器(温湿度、PM2.5、风速等)、WIFI模组(ESP8266)、继电器模块。
软件:编译工具STM32CubeMX+Keil5、手机微信小程序、PC上位机、云IOT服务器。通过完成这个项目,你可以了解如何开始设计一个工程类项目,熟练掌握STM32使用及软件代码编程,传感器数据通讯原理、WIFI通信、IOT物联网服务器操作、微信小程序交互界面代码编写等技能。
1) 选择适合的核心-主控MCU:STM32
为什么选择STM32?老工程师说过一句话:“使用STM32F1系列就是用最低的成本依靠编程发挥其最大的性能,市面上大多数硬件产品靠它就行”。STM32产品用的人多,性能也不差,所以项目首选是STM32产品。但智能家居物联网的项目对功耗的要求非常高,因此系统中使用的是STM32L系列的芯片。STM32L0系列,ARM Cortex-M0+内核与STM32单片机超低功耗特性的独有结合,使STM32 L0 MCU非常适合电池供电或供电来自能量收集的应用。STM32L0微控制器提供了动态电压调节、超低功耗时钟振荡器、LCD接口、比较器、DAC及硬件加密。在这个项目上,使用的是基于STM32L的腾讯开发板。有同学会问:我没有这块腾讯的开发板,源码还有没有用。当然有用,系统源码可以移植至STM32其他系列,所以不用担心板卡不同。智能家居项目中少不了的另外重要组成就是——数据采集的硬件,简单说就是各类传感器。根据完成功能的不同,选择不同的传感器。在项目中,我们用到的空气质量传感器、光照度传感器、UV rays sensor(紫外线、温湿度传感器)、通信仪,都是485接口,方便和STM32进行通信。3) 获得的数据通过WIFI方式通信传输并处理作出及时响应。通信的方式无外乎:蓝牙、Zigbee、GPRS、WIFI、NBIOT、4G、以太网。这些通信方式的优缺点可以查看毕设课程——通信接口电路讲解。我们选择了WIFI通信方式,通过手机可以实现远程监测和控制。WIFI模组选用的是ESP8266,又是一个大家都会经常用到的模块。选择常用的模块好处就是可以轻松上手。4) 物联网搭档-云平台的选择,采用的是自己搭建的IOT服务器。当然,你也可以不用连接到云平台处理数据。我们选择的主控STM32芯片使用的是传统的开发工具,STM32CubeMX+Keil5,初学者如果不熟悉Cube和HAL库的话,可以使用官方的库函数进行开发,建议参考市面上教育平台的资料和例程,例如:野火、正点原子等。完整的工程源码全部开源,可以在“达尔闻说”微信回复:STM32智能家居,获得。/***********************************************************
函数名称:Find_string(char*pcBuf,char*left,char*right, char *pcRes)
函数功能:寻找特定字符串
入口参数:
char *pcBuf 为传入的字符串
char *left 为搜索字符的左边标识符 例如:"["
char *right 为搜索字符的右边标识符 例如:"]"
char *pcRes 为输出转存的字符串
返回值:用来校验是否成功。
备注:left字符需要唯一,right字符从left后面开始唯一即可
服务器下发命令举例:+MQTTPUBLISH: 0,0,0,0,/device/NB/zx9999_back,6,[test]
参考网上教程自己DIY一些实用的函数
***********************************************************/
int Find_string(char *pcBuf,char *left,char*right, char *pcRes)
{
char*pcBegin = NULL;
char*pcEnd = NULL;
pcBegin= strstr(pcBuf, left);//找到第一次出现的位置
pcEnd= strstr(pcBegin+strlen(left), right);//找到右边标识
if(pcBegin== NULL || pcEnd == NULL || pcBegin > pcEnd)
{
printf("stringname not found!\n");
return0;
}
else
{
pcBegin+= strlen(left);
memcpy(pcRes,pcBegin, pcEnd-pcBegin);
return1;
}
}
此函数可以实现对指令字符串进行寻找,可以很方便的用在串口通讯和物联网设备服务器下发数据的解析上。例如:服务器下发一个让设备休眠指定时间的命令,下发的数据包肯定包含了除命令以外的其他无关数据,而你只想要其中的休眠时间,如数据包为:+MQTTPUBLISH:0,0,0,0,/device/NB/zx99_back,6,sleep=20min;id=234;csq=34;Find_string(RevBuf,"sleep=","min",sleep_buf) 即可识别服务器下发的数据包中休眠时间为 20。备注:由于文章篇幅的限制,其他代码的解析就不一一放出来,大家可以在“达尔闻说”微信回复:STM32智能家居,获得更多代码详解。PC端上位机开发可根据个人能力和自己编程基础来做,可以使用自己比较熟悉的编程语言和IDE来开发,熟悉C++的同学可以使用QT来开发,或者C#、JAVA、python等,也有一些工业级的开发环境比如LabVIEW,还有很炫酷的Processing。我经常使用python来做上位机,非常快捷。微信小程序编写也需要看个人编程基础,如果你对这块不擅长,可以直接使用一些开源的程序,在开源的基础上添加修改达到需要的功能。我用到的微信小程序源码也一并放出来给大家参考。 当完成以上步骤之后,就是见证奇迹时刻——系统联调,看看系统各个功能是否可以工作。项目进行软硬件联调的时候,很多不确定因素会导致出现一些问题,比如网络通讯、数据解析、硬件异常。所以联调的时候要保证两者单方面的稳定性,不至于出现错误的时候手忙脚乱。在调试这个系统的时候,我就遇到了问题:调试TencentOS tiny内测项目的时候,硬件设备上报服务器数据是正常的,但是微信小程序接收数据异常,排查很久,确认微信小程序中json解析函数出现bug,最后定位为硬件数据上报数据最后多了几个空格,导致微信小程序认为json格式错误而无法解析,通过正则表达式去除结尾空格,再用json解析函数取出数据点。教给大家在项目开发过程中查找解决问题的一个方法:项目开发的时候,调不通是很常见的,解决办法就是“控制变量法”,要让错误变得清晰明了,一点一点排查,找到导致错误的代码或者函数,如果是硬件的话,找到导致错误的芯片或者电路。然后有针对性的查找资料和解决问题,这样可以做到有的放矢。举个列子:调试某项目电路板中内存芯片(W25Q系列),这是一款很常见的芯片,但是就是调试不通,SPI读取不到ID。利用控制变量法:1、先排查代码,同样的代码刷入其他开发板,确认代码正常,2、排查硬件,取下芯片,焊接到其他开发板,确认芯片正常,3、排查电路,后来发现是硬件工程师绘制原理图的时候SPI接线出现了偏差,跳线后测试正常,成功解决问题,第二版改原理图和PCB即可。(老工程师画板子也有失误的时候,流汗。。。)总结:虽然上面完成的是个智能家居的项目,但是通过这个完整的项目,从中可以学习到如STM32使用,小程序编写,数据通信处理等等,这些技能你可以用到更多的应用场景中。没有相同的开发板和传感器,没关系,阿正分享的程序源码完全可以移植。在B站上,阿正分享了自己的毕设获得3.6w+次观看,预告:教学视频即可预约11月19日(周二)下午3:00达尔闻直播。直播过程中,将在达尔闻微信交流群抽取STM32开发板。如果你在学习中遇到问题,欢迎来达尔闻交流群,进群方式:添加妮姐微信459888529。
达尔闻联合全球知名元器件分销商Digi-Key陪伴大家大学生涯的最重要也是最后一堂课:毕设!毕设课程共17讲:从“选题——基础知识点补足——项目拆分讲解——优秀作品分享”逐个帮你解决从开题到最终答辩过程中的各个问题。
得捷-毕业设计17节免费课程高能回顾:
开篇介绍:毕业设计“包过”秘籍,附板卡白piao
毕设第1课:如何选题,哪类毕设适合自己
毕设第2课:毕设读题案例分析
毕设第3课:毕设开发平台选择
毕设第4/5课:2小时用AD19画STM32核心板
毕设第6课:C语言/Verilog语言基础补给
毕设第7课:用Tensorflow搭建神经网络(阅读原文,进毕设第7课查看)
毕设第8课:系统调试技巧之仪器的用法
毕设第9课:利用仪器加快设计开发
毕设第10课:电源电路设计
毕设第11课:常用传感器分析与设计
毕设第12课:常用数据总线分析(阅读原文,进毕设第12课查看)
毕设第13课:通信接口设计
毕设第14课:教你设计电机驱动电路